package com.itheima.edu.info.manager.controller;

import com.itheima.edu.info.manager.domain.Student;
import com.itheima.edu.info.manager.service.StudentService;

import java.util.Scanner;

/**
 * @Author 王加鑫
 * @Date 2021/5/4 20:40
 * @Version 1.0
 * 学生管理系统的Controller层
 */
public class StudentController {
    private StudentService studentService = new StudentService();
    Scanner sc = new Scanner(System.in);
    /*
    搭建学生系统的基本框架
     */
    public void start() {
        while (true){
            System.out.println("--------欢迎来到 <学生> 管理系统--------");
            System.out.println("请输入您的选择: 1.添加学生  2.删除学生  3.修改学生  4.查看学生  5.退出");
            String s = sc.next();
            switch (s){
                case "1":
                    //添加学生
                    addStudent();
                    break;
                case "2":
                    deleteStudent();
                    break;
                case "3":
                    updateStudent();
                    break;
                case "4":
                    /*
                    查看学生
                     */
                    findAllStudent();
                    break;
                case "5":
                    System.out.println("退出");
                    //结束当前系统,不能结束虚拟机
                    return;
                default:
                    System.out.println("您的输入有误,请重新输入:");
            }
        }
    }

    /*
    修改学生
     */
    private void updateStudent() {
        System.out.println("请输入您要修改的学生id:");
        String sId = sc.next();
        Student student = studentService.selectStudentById(sId);
        if(student == null){
            System.out.println("系统中还没有数据，请添加数据再进行修改！！！");
            return;
        }else {
            System.out.println("请输入您要修改的学生姓名：");
            String sName = sc.next();
            System.out.println("请输入您要修改的学生年龄：");
            String sAge = sc.next();
            System.out.println("请输入您要修改的学生生日：");
            String sBirth = sc.next();
            student.setStuName(sName);
            student.setStuAge(sAge);
            student.setStuBirth(sBirth);
            System.out.println("修改成功！！！");
        }
    }


    /*
    删除学生
     */
    private void deleteStudent() {
       String sId = infoStudentId();
        //指挥业务员进行删除业务
        studentService.deleteStudent(sId);
    }

    /*
    Controller层实现查询学生
    给客户展示数据
     */
    private void findAllStudent() {
        /*
        查询出来的数组有三种情况
        1.{null,null,null,null,null}
        2.{stu,stu,null,null,null}
        3.{stu,stu,stu,stu,stu}
         */
        Student[] students = studentService.findAllStudent();
        //当数组元素全部为null时
        if(students == null){
            System.out.println("学生信息为空,请先添加数据再进行查询!");
            return;
        }else {
            System.out.println("学号\t\t姓名\t年龄\t生日");
            for (int i = 0; i < students.length; i++) {
                Student stu = students[i];
                //当数组中存在元素时并且去除后面可能存在的null值
                if(stu != null){
                    System.out.println(stu.getId() + "\t\t\t" + stu.getName() + "\t" + stu.getAge() + "\t\t" + stu.getBirth());
                }
            }
        }
    }

    /*
    Controller层实现添加学生
    给客户展示数据
     */
    private void addStudent() {
        String sId;
        while (true){
            System.out.println("请输入学生id:");
            sId = sc.next();
            /*
           在输入学生id的时候需要判断id在容器中是否存在
           只有index = -1时表示Id没有被占用;
           */
            boolean exists = studentService.isExists(sId);
            if(exists){
                System.out.println("该学号已被占用,请重新输入:");
            }else {
                Student student = findStudentById(sId);
                //指挥service层添加学生
                boolean flag = studentService.addStudent(student);
                if(flag){
                    System.out.println("添加成功");
                }else {
                    System.out.println("添加失败");
                }
                break;
            }
        }
    }

    //判断学号是否存在
    public String infoStudentId(){
        String sId;
        while (true) {
            System.out.println("请输入学生id:");
            sId = sc.next();
            //指挥业务员校验一下本次录入的学号是否存在
            boolean exists = studentService.isExists(sId);
            //存在:往下删除,不存在,循环重新录入
            if (exists) {
                break;
            } else {
                System.out.println("当前学号不存在,请重新输入:");
            }
        }
        return sId;
    }

    //根据学号返回Student对象
    public Student findStudentById(String sid){
        System.out.println("请输入学生姓名：");
        String sName = sc.next();
        System.out.println("请输入学生年龄：");
        String sAge = sc.next();
        System.out.println("请输入学生生日：");
        String sBirth = sc.next();
        Student student = new Student();
        student.setId(sid);
        student.setName(sName);
        student.setAge(sAge);
        student.setBirth(sBirth);
        return student;
    }

}
